Good job's Darkflamed
I can't wait for HKO
This is a discussion on Penguin here, check this out. within the Private Servers forums, part of the Knight Online (ko4life.com) category; Good job's Darkflamed
I can't wait for HKO...
Page: 2
Good job's Darkflamed
I can't wait for HKO
That's all well and good, but most of the stuff, that was even asked, was already answered before we even got to them. Why double answer stuff? You sit there, all day, and answer posts with "There is a search function". Not ALL the time, but that is most of what you have to do.
Whatever, misunderstandings all around.
Edit: The stuff we posted, or did help on, was the stuff that wasn't already answered. And the stuff that wasn't already readily on the forums, besides Darkflameds tools. But I don't think you're gonna go sharing your Deathlogs, or any of the other stuff that makes up LegitKO. Lol.
Sigh. I thought we could get passed it, whatever. You didn't even give me a chance to say anything other than acting like a fat kid that just got cake in a post. Excitement, it's srs bsns.
Also, I CLEARLY said lets not talk about my server in this thread, I said that, I did, you can quote it.
Bullshit. What about my dupe scanner, or my item importer, or my item log importer, or my inventory editor, or my BytePatcher (and the plethora of converted patches), or my Ebenezer/Client Editor, or any of my 9999999 raw assembly patches, or the snoxd-koserver project, or...
But no, I don't share the death logs... really? >.>
People can't use them, is why.
Here, have at it:
And now you have it.Code:#include "stdafx.h" #include "generic_log_deaths.h" BOOL WINAPI DeathLogger(LPVOID lpParam); bool InsertDeathLogToDatabase(std::unique_ptr<OdbcCommand>& dbCommand, DeathLog * origLog); static FastMutex s_insertionLock; static std::queue<DeathLog *> s_deathQueue; DEPENDS_ON(OnPlayerDeath); DECL_PATCH(LogDeaths, IMPL_PATCH() { ADD_CALLBACK(HookOnPlayerDeath, [](CUser * pUser, int killerID) { // Only log deaths from players. if (VALID_UID(killerID)) pUser->LogDeath(killerID); }, (CUser *, int)); DWORD dwThreadId; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) &DeathLogger, NULL, NULL, &dwThreadId); } ); void CUser::LogDeath(int killerID) { CUser * pKiller = m_pMain->GetUserPtr(killerID); if (pKiller != nullptr) InsertDeathToLogQueue(this, pKiller); } void DeathLog::LogUser::Load(CUser * pUser) { strcpy(strAccountID, pUser->m_strAccountID); strcpy(strUserID, pUser->m_pUserData->m_id); fCurX = pUser->m_pUserData->m_curx; fCurZ = pUser->m_pUserData->m_curz; _PARTY_GROUP * pParty; if (pUser->m_sPartyIndex < 0 || (pParty = m_pMain->GetPartyPtr(pUser->m_sPartyIndex)) == nullptr) return LoadPartyUser(0, pUser); for (int i = 0; i < MAX_PARTY_USERS; i++) { CUser * pPartyUser = m_pMain->GetUserPtr(pParty->uid[i]); if (pPartyUser != nullptr) LoadPartyUser(i, pPartyUser); } } void DeathLog::LogUser::LoadPartyUser(int pos, CUser * pUser) { PartyUser& user = party[pos]; int index = 0; strcpy(user.strUserID, strUserID); for (int i = 0; i < SLOT_MAX; i++) SetDWORD((char *)user.strItem, pUser->m_pUserData->m_sItemArray[i].nNum, index); } void _InsertDeathLogToQueue(DeathLog * d) { FastGuard lock(s_insertionLock); s_deathQueue.push(d); } void InsertDeathToLogQueue(CUser * pVictim, CUser * pKiller) { if (pVictim == nullptr || pKiller == nullptr) return; DeathLog * d = new DeathLog; memset(d, 0, sizeof(DeathLog)); d->deathTime = UNIXTIME; d->killer.Load(pKiller); d->victim.Load(pVictim); _InsertDeathLogToQueue(d); } BOOL WINAPI DeathLogger(LPVOID lpParam) { OdbcConnection gameDB; std::string gameDSN, gameUID, gamePWD; sIni.GetString("ODBC", "GAME_DSN", "KN_online", gameDSN, false); sIni.GetString("ODBC", "GAME_UID", "knight", gameUID, false); sIni.GetString("ODBC", "GAME_PWD", "knight", gamePWD, false); if (!gameDB.Connect(gameDSN, gameUID, gamePWD)) { OdbcError *error = gameDB.GetError(); Log.Error("Database", "Could not connect to the database server."); Log.Error("Database", "The error returned was:\n%s", error->ErrorMessage.c_str()); delete error; return FALSE; } Log.Notice("Database", "[Death logger] successfully connected to %s", gameDSN.c_str()); std::unique_ptr<OdbcCommand> dbCommand(gameDB.CreateCommand()); std::queue<DeathLog *> activeQueue; while (true) { // Transfer items from the insertion queue // to the active queue, so while we're dealing // with the database we're not blocking insertions. s_insertionLock.Acquire(); while (!s_deathQueue.empty()) { activeQueue.push(s_deathQueue.front()); s_deathQueue.pop(); } s_insertionLock.Release(); while (!activeQueue.empty()) { DeathLog * d = activeQueue.front(); if (!InsertDeathLogToDatabase(dbCommand, d)) break; delete d; activeQueue.pop(); } Sleep(1000); } return TRUE; } bool InsertDeathLogToDatabase(std::unique_ptr<OdbcCommand>& dbCommand, DeathLog * origLog) { if (dbCommand.get() == nullptr) { Log.Warning("DeathLog", "Failed to insert death log. No command available."); return false; } static bool bound = false, prepared = false; static DeathLog d = {0}; // Replace death log entry data. memcpy(&d, origLog, sizeof(DeathLog)); if (!bound) { dbCommand->AddInputParameter(&d.byZoneID); dbCommand->AddInputParameter(&d.deathTime); dbCommand->AddInputParameter(d.killer.strAccountID); dbCommand->AddInputParameter(d.killer.strUserID); dbCommand->AddInputParameter(&d.killer.fCurX); dbCommand->AddInputParameter(&d.killer.fCurZ); dbCommand->AddInputParameter(d.victim.strAccountID); dbCommand->AddInputParameter(d.victim.strUserID); dbCommand->AddInputParameter(&d.victim.fCurX); dbCommand->AddInputParameter(&d.victim.fCurZ); for (int i = 0; i < MAX_PARTY_USERS; i++) { auto& user = d.killer.party[i]; dbCommand->AddInputParameter(user.strUserID, sizeof(user.strUserID)); dbCommand->AddInputParameter(user.strItem, sizeof(user.strItem)); } for (int i = 0; i < MAX_PARTY_USERS; i++) { auto& user = d.victim.party[i]; dbCommand->AddInputParameter(user.strUserID, sizeof(user.strUserID)); dbCommand->AddInputParameter(user.strItem, sizeof(user.strItem)); } bound = true; } if (!prepared) { if (!dbCommand->Prepare("{CALL INSERT_DEATH_LOG " "(?, ?, " // byZoneID, date "?, ?, ?, ?, " // killer account, char, x, z "?, ?, ?, ?, " // victim account, char, x, z "?,?, ?,?, ?,?, ?,?, ?,?, ?,?, ?,?, ?,?, " // killer party (name, items) "?,?, ?,?, ?,?, ?,?, ?,?, ?,?, ?,?, ?,?)}")) // victim party (name, items) { const char * error = dbCommand->GetError(); Log.Error("DeathLog", "Error: %s", error); return false; } prepared = true; } if (!dbCommand->ExecutePrepared()) { const char * error = dbCommand->GetError(); Log.Error("DeathLog", "Error: %s", error); prepared = false; return false; } return true; }
Edit:
As for your server advertising, okay:
This is just another misunderstanding, right?
Yes, two, I know, you've shared a lot of shit, as a matter of fact, I believe I drunkenly wrote you on these forums and thanked you for your work. I'm sure you saw it. Weeeee really don't need your Deathlogs haha we have our own. I wasn't saying ooh share your deathlogs then. And really, how many people are even going to know what to do with that? Aside from you, Darkflamed, Johnny, and maybe 1 or 2 other people? Lulz. You made a useless point you really did. You didn't give me more than 1 excited post to even say anything haha. I wasn't REALLY even that big of a prick on that post. I didn't insult, anyone haha.
Edit: I said a new age of Private KO, then yes, I did put my servers name at the bottom. Me oh my. I put the server that I represent.. On my post.. But facts are facts. Can't argue facts. I advertised my server.
And people can't use Darkflamed's? So, useless point.
Oh my lawd, I didn't "imply" the worst. I'm just saying, you are getting paid to keep that shit to yourself and code everything for them, so why would you share it? And now you've shared something that doesn't matter. Really, I'm so done with this. You keep twisting my shit around trying to make me look like an ass haha. Doesn't, even, matter.
a. Why are you replying to my pre-edited post? You posted after the edit, and then... proceeded to edit your post just... to further respond to the stuff that I removed? That's why I removed that in the first place, I misquoted. I'm sorry.
b. You're comparing apples to oranges. You're comparing a tool with a UI to a random (modular) patch in a DLL. Can you see how one's usable and one isn't? That is the extent of that point.
I truly don't understand how we even got to this point, or why we're splitting hairs over nothing?
Really, you made it clear you're not sharing, and there's nothing wrong with that. I never said that there was.
The leeching thing was only in relation to your account activity on the development forum, where you originally made the post; you'd not contributed anything, so
as with everyone else that I deal with, I made the decision to simply forego the warn, because of this. That's it.
Why are we even..
Last edited by twostars; 03-23-2014 at 06:10 PM. Reason: edit
Honestly I didn't even notice the changes I just edited it with the original quote, so I wasn't trying to like point anything out I just hit quote and then edited the post afterwards.
Sort of apples to oranges, ish. There's some stuff that people can't use. But there is shit we can share, yeah. But we would like to get some stuff into our server before we do, is that an asshole move? Or is that like, a big deal? That is, we don't plan on NOT sharing how we do this, this is huge! We would love to share it, after we can do some stuff for our server before everything starts flying around. I think it's fair with all the work we did.
I don't know how we got here either. I wasn't REALLY trying to be an asshole, I truly wasn't. Though I can see how you thought I was. I'll apologize for that, buuuut I really think you took it way worse than it was. So, can we just leave this -.-? Because I have never had any quarrels with you and I really don't want to start now, I see no point in it, it's childish.
And yes, my post WAS childish, like I said, a fat kid who had just received cake, that was me when I was making the post. But not to be arrogant, just excitement.
Not only that, BUT, the tools still have some work to be done. We can export and import weapons, but the export has some issues that need to be worked out for character models and what the export puts out.
But I got a couple weapons in, and was ecstatic, and made the post. My bad. My bad.
Perhaps I did. Consider it left.
If you're still all about the "let's change the scene" stuff, I have plenty of stuff sitting here that's probably not going to be put to use for a long time, if ever (especially if I keep adding to it the way I do).
I mean, right at this second I'm (still) working on bringing the client source up to speed...
Man, you and Darkflamed really need to talk to each other and add each other on skype. I'm not boasting him or anything, but I think he can help you more than anyone else currently in the scene other than Johnny who has absolutely no interest. Really, you two should talk.
Better to start than not start. He was just upset that his work was shot down after everything he's been doing, BUT, that was my fault, not yours, and he's reading this and we're on mic, so we're all at an understanding. I shouldn't have acted like a gitty little girl. My fault, my fault.
There is a same guy b1tching around in every pvp server advertisements topic, wtf is just going on
wow
Bookmarks