void DESC::Destroy() { if (m_bDestroyed) { return; } m_bDestroyed = true; if (m_pkLoginKey) m_pkLoginKey->Expire(); if (GetAccountTable().id) DESC_MANAGER::instance().DisconnectAccount(GetAccountTable().login); if (m_pLogFile) { fclose(m_pLogFile); m_pLogFile = NULL; } if (m_lpCharacter) { m_lpCharacter->Disconnect("DESC::~DESC"); m_lpCharacter = NULL; } SAFE_BUFFER_DELETE(m_lpOutputBuffer); SAFE_BUFFER_DELETE(m_lpInputBuffer); event_cancel(&m_pkPingEvent); event_cancel(&m_pkDisconnectEvent); if (!g_bAuthServer) { if (m_accountTable.login[0] && m_accountTable.passwd[0]) { TLogoutPacket pack; strlcpymt(pack.login, m_accountTable.login, sizeof(pack.login)); strlcpymt(pack.passwd, m_accountTable.passwd, sizeof(pack.passwd)); db_clientdesc->DBPacket(HEADER_GD_LOGOUT, m_dwHandle, &pack, sizeof(TLogoutPacket)); } } if (m_sock != INVALID_SOCKET) { sys_log(0, "SYSTEM: closing socket. DESC #%d", m_sock); Log("SYSTEM: closing socket. DESC #%d", m_sock); fdwatch_del_fd(m_lpFdw, m_sock); #ifdef _IMPROVED_PACKET_ENCRYPTION_ cipher_.CleanUp(); #endif socket_close(m_sock); m_sock = INVALID_SOCKET; } m_seq_vector.clear(); }
void tw_event_rollback(tw_event * event) { tw_event *e = event->caused_by_me; tw_lp *dest_lp = event->dest_lp; tw_free_output_messages(event, 0); dest_lp->pe->cur_event = event; dest_lp->kp->last_time = event->recv_ts; (*dest_lp->type->revent)(dest_lp->cur_state, &event->cv, tw_event_data(event), dest_lp); if (event->delta_buddy) { tw_clock start = tw_clock_read(); buddy_free(event->delta_buddy); g_tw_pe[0]->stats.s_buddy += (tw_clock_read() - start); event->delta_buddy = 0; } while (e) { tw_event *n = e->cause_next; e->cause_next = NULL; event_cancel(e); e = n; } event->caused_by_me = NULL; dest_lp->kp->s_e_rbs++; }
/* change_event_duration contributed by Ripley */ void change_event_duration(struct char_data * ch, event_id iId, long time) { struct event * pEvent; struct mud_event_data * pMudEvent; bool found = FALSE; if (ch->events == NULL) return; if (ch->events->iSize == 0) return; clear_simple_list(); while ((pEvent = (struct event *) simple_list(ch->events)) != NULL) { if (!pEvent->isMudEvent) continue; pMudEvent = (struct mud_event_data * ) pEvent->event_obj; if (pMudEvent->iId == iId) { found = TRUE; break; } } if (found) { /* So we found the offending event, now build a new one, with the new time */ attach_mud_event(new_mud_event(iId, pMudEvent->pStruct, pMudEvent->sVariables), time); event_cancel(pEvent); } }
void conn_delete_by_desc(DESC_DATA *d) { CONN_MAP::iterator iter, cur_iter; for (iter = s_conn_map.begin(); iter != s_conn_map.end(); ) { cur_iter = iter; iter++; CONN_DATA *conn = cur_iter->second; if (GET_DESC(conn) == d) { s_conn_map.erase(cur_iter); account_logout(conn); if (GET_EVENT(conn)) { event_cancel(GET_EVENT(conn)); GET_EVENT(conn) = NULL; } SAFE_FREE(conn); } } }
int main(void) { puts("[START] event test application.\n"); event_queue_t queue = { .waiter = (thread_t *)sched_active_thread }; printf("posting 0x%08x\n", (unsigned)&event); event_post(&queue, &event); printf("posting 0x%08x\n", (unsigned)&event2); event_post(&queue, &event2); printf("canceling 0x%08x\n", (unsigned)&event2); event_cancel(&queue, &event2); printf("posting custom event\n"); event_post(&queue, (event_t *)&custom_event); event_timeout_t event_timeout; printf("posting timed callback with timeout 1sec\n"); event_timeout_init(&event_timeout, &queue, (event_t *)&event_callback); before = xtimer_now_usec(); event_timeout_set(&event_timeout, 100000LU); printf("launching event queue\n"); event_loop(&queue); return 0; }
bool CItem::AddToCharacter(LPCHARACTER ch, TItemPos Cell) { assert(GetSectree() == NULL); assert(m_pOwner == NULL); WORD pos = Cell.cell; BYTE window_type = Cell.window_type; if (INVENTORY == window_type) { if (m_wCell >= INVENTORY_MAX_NUM && BELT_INVENTORY_SLOT_START > m_wCell) { sys_err("CItem::AddToCharacter: cell overflow: %s to %s cell %d", m_pProto->szName, ch->GetName(), m_wCell); return false; } } else if (DRAGON_SOUL_INVENTORY == window_type) { if (m_wCell >= DRAGON_SOUL_INVENTORY_MAX_NUM) { sys_err("CItem::AddToCharacter: cell overflow: %s to %s cell %d", m_pProto->szName, ch->GetName(), m_wCell); return false; } } if (ch->GetDesc()) m_dwLastOwnerPID = ch->GetPlayerID(); event_cancel(&m_pkDestroyEvent); ch->SetItem(TItemPos(window_type, pos), this); m_pOwner = ch; Save(); return true; }
void CWarMap::IncMember(LPCHARACTER ch) { if (!ch->IsPC()) return; sys_log(0, "WarMap::IncMember"); DWORD gid = 0; if (ch->GetGuild()) gid = ch->GetGuild()->GetID(); bool isWarMember = ch->GetQuestFlag("war.is_war_member") > 0 ? true : false; if (isWarMember && gid != m_TeamData[0].dwID && gid != m_TeamData[1].dwID) { ch->SetQuestFlag("war.is_war_member", 0); isWarMember = false; } if (isWarMember) { if (gid == m_TeamData[0].dwID) { m_TeamData[0].AppendMember(ch); } else if (gid == m_TeamData[1].dwID) { m_TeamData[1].AppendMember(ch); } event_cancel(&m_pkTimeoutEvent); sys_log(0, "WarMap +m %u(cur:%d, acc:%d) vs %u(cur:%d, acc:%d)", m_TeamData[0].dwID, m_TeamData[0].GetCurJointerCount(), m_TeamData[0].GetAccumulatedJoinerCount(), m_TeamData[1].dwID, m_TeamData[1].GetCurJointerCount(), m_TeamData[1].GetAccumulatedJoinerCount()); } else { ++m_iObserverCount; sys_log(0, "WarMap +o %d", m_iObserverCount); ch->SetObserverMode(true); ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("관전 모드로 길드전에 참가하셨습니다.")); ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("자신을 선택하시면 밖으로 나갈 수 있는 <관람 종료> 버튼이 나옵니다.")); } UpdateUserCount(); m_set_pkChr.insert(ch); LPDESC d = ch->GetDesc(); SendWarPacket(d); SendScorePacket(0, d); SendScorePacket(1, d); }
void CWarMap::SetResetFlagEvent(LPEVENT pkEv) { if (m_pkResetFlagEvent != NULL) { event_cancel(&m_pkResetFlagEvent); } if (pkEv != NULL) { m_pkResetFlagEvent = pkEv; } }
void CWarMap::SetTimeoutEvent(LPEVENT pkEv) { if (m_pkTimeoutEvent != NULL) { event_cancel(&m_pkTimeoutEvent); } if (pkEv != NULL) { m_pkTimeoutEvent = pkEv; } }
void CWarMap::SetBeginEvent(LPEVENT pkEv) { if (m_pkBeginEvent != NULL) { event_cancel(&m_pkBeginEvent); } if (pkEv != NULL) { m_pkBeginEvent = pkEv; } }
/* Extract an object from the world */ void extract_obj(struct obj_data *obj) { struct char_data *ch, *next = NULL; struct obj_data *temp; if (obj->worn_by != NULL) if (unequip_char(obj->worn_by, obj->worn_on) != obj) log("SYSERR: Inconsistent worn_by and worn_on pointers!!"); if (IN_ROOM(obj) != NOWHERE) obj_from_room(obj); else if (obj->carried_by) obj_from_char(obj); else if (obj->in_obj) obj_from_obj(obj); if (OBJ_SAT_IN_BY(obj)){ for (ch = OBJ_SAT_IN_BY(obj); OBJ_SAT_IN_BY(obj); ch = next){ if (!NEXT_SITTING(ch)) OBJ_SAT_IN_BY(obj) = NULL; else OBJ_SAT_IN_BY(obj) = (next = NEXT_SITTING(ch)); SITTING(ch) = NULL; NEXT_SITTING(ch) = NULL; } } /* Get rid of the contents of the object, as well. */ while (obj->contains) extract_obj(obj->contains); REMOVE_FROM_LIST(obj, object_list, next); if (GET_OBJ_RNUM(obj) != NOTHING) (obj_index[GET_OBJ_RNUM(obj)].number)--; if (SCRIPT(obj)) extract_script(obj, OBJ_TRIGGER); if (obj->events != NULL) { if (obj->events->iSize > 0) { struct event * pEvent; while ((pEvent = simple_list(obj->events)) != NULL) event_cancel(pEvent); } free_list(obj->events); obj->events = NULL; } if (GET_OBJ_RNUM(obj) == NOTHING || obj->proto_script != obj_proto[GET_OBJ_RNUM(obj)].proto_script) free_proto_script(obj, OBJ_TRIGGER); free_obj(obj); }
void CParty::Destroy() { sys_log(2, "Party::Destroy"); // PC°Ў ёёµз ЖДЖјёй ЖДЖјёЕґПАъїЎ ёКїЎј PIDё¦ »иБ¦ЗШѕЯ ЗСґЩ. if (m_bPCParty) { for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it) CPartyManager::instance().SetPartyMember(it->first, NULL); } event_cancel(&m_eventUpdate); RemoveBonus(); TMemberMap::iterator it = m_memberMap.begin(); DWORD dwTime = get_dword_time(); while (it != m_memberMap.end()) { TMember & rMember = it->second; ++it; if (rMember.pCharacter) { if (rMember.pCharacter->GetDesc()) { TPacketGCPartyRemove p; p.header = HEADER_GC_PARTY_REMOVE; p.pid = rMember.pCharacter->GetPlayerID(); rMember.pCharacter->GetDesc()->Packet(&p, sizeof(p)); rMember.pCharacter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<ЖДЖј> ЖДЖј°Ў ЗШ»к µЗѕъЅАґПґЩ.")); } else { // NPCАП °жїм АПБ¤ ЅГ°Ј ИД АьЕх БЯАМ ѕЖґТ ¶§ »з¶уБц°Ф ЗПґВ АМєҐЖ®ё¦ ЅГАЫЅГЕІґЩ. rMember.pCharacter->SetLastAttacked(dwTime); rMember.pCharacter->StartDestroyWhenIdleEvent(); } rMember.pCharacter->SetParty(NULL); } } m_memberMap.clear(); m_itNextOwner = m_memberMap.begin(); if (m_pkDungeon_for_Only_party != NULL) { m_pkDungeon_for_Only_party->SetPartyNull(); m_pkDungeon_for_Only_party = NULL; } }
void CParty::Destroy() { sys_log(2, "Party::Destroy"); // PC가 만든 파티면 파티매니저에 맵에서 PID를 삭제해야 한다. if (m_bPCParty) { for (TMemberMap::iterator it = m_memberMap.begin(); it != m_memberMap.end(); ++it) CPartyManager::instance().SetPartyMember(it->first, NULL); } event_cancel(&m_eventUpdate); RemoveBonus(); TMemberMap::iterator it = m_memberMap.begin(); DWORD dwTime = get_dword_time(); while (it != m_memberMap.end()) { TMember & rMember = it->second; ++it; if (rMember.pCharacter) { if (rMember.pCharacter->GetDesc()) { TPacketGCPartyRemove p; p.header = HEADER_GC_PARTY_REMOVE; p.pid = rMember.pCharacter->GetPlayerID(); rMember.pCharacter->GetDesc()->Packet(&p, sizeof(p)); rMember.pCharacter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<파티> 파티가 해산 되었습니다.")); } else { // NPC일 경우 일정 시간 후 전투 중이 아닐 때 사라지게 하는 이벤트를 시작시킨다. rMember.pCharacter->SetLastAttacked(dwTime); rMember.pCharacter->StartDestroyWhenIdleEvent(); } rMember.pCharacter->SetParty(NULL); } } m_memberMap.clear(); m_itNextOwner = m_memberMap.begin(); if (m_pkDungeon_for_Only_party != NULL) { m_pkDungeon_for_Only_party->SetPartyNull(); m_pkDungeon_for_Only_party = NULL; } }
void CItem::StopTimerBasedOnWearExpireEvent() { if (!m_pkTimerBasedOnWearExpireEvent) return; int remain_time = GetSocket(ITEM_SOCKET_REMAIN_SEC) - event_processing_time(m_pkTimerBasedOnWearExpireEvent) / passes_per_sec; SetSocket(ITEM_SOCKET_REMAIN_SEC, remain_time); event_cancel(&m_pkTimerBasedOnWearExpireEvent); ITEM_MANAGER::instance().SaveSingleItem(this); }
/* remove a single trigger from a mob/obj/room */ void extract_trigger(trig_data *trig) { trig_data *temp; if (GET_TRIG_WAIT(trig)) { event_cancel(GET_TRIG_WAIT(trig)); GET_TRIG_WAIT(trig) = NULL; } /* walk the trigger list and remove this one */ REMOVE_FROM_LIST(trig, trigger_list, next_in_world); free_trigger(trig); }
void CTargetManager::Logout(DWORD dwPID) { itertype(m_map_kListEvent) it = m_map_kListEvent.find(dwPID); if (it == m_map_kListEvent.end()) return; std::list<LPEVENT>::iterator it2 = it->second.begin(); while (it2 != it->second.end()) event_cancel(&(*(it2++))); m_map_kListEvent.erase(it); }
CWarMap::~CWarMap() { event_cancel(&m_pkBeginEvent); event_cancel(&m_pkEndEvent); event_cancel(&m_pkTimeoutEvent); event_cancel(&m_pkResetFlagEvent); sys_log(0, "WarMap::~WarMap : map index %d", GetMapIndex()); itertype(m_set_pkChr) it = m_set_pkChr.begin(); while (it != m_set_pkChr.end()) { LPCHARACTER ch = *(it++); if (ch->GetDesc()) { sys_log(0, "WarMap::~WarMap : disconnecting %s", ch->GetName()); DESC_MANAGER::instance().DestroyDesc(ch->GetDesc()); } } m_set_pkChr.clear(); }
void maple_set_dma_state( uint32_t val ) { gboolean in_transfer = MMIO_READ( ASIC, MAPLE_STATE ) & 1; gboolean transfer_requested = val & 1; if( !in_transfer && transfer_requested ) { /* Initiate new DMA transfer */ uint32_t maple_addr = MMIO_READ( ASIC, MAPLE_DMA) &0x1FFFFFE0; maple_handle_buffer( maple_addr ); } else if ( in_transfer && !transfer_requested ) { /* Cancel current DMA transfer */ event_cancel( EVENT_MAPLE_DMA ); } MMIO_WRITE( ASIC, MAPLE_STATE, val ); }
void clear_char_event_list(struct char_data * ch) { struct event * pEvent; if (ch->events == NULL) return; if (ch->events->iSize == 0) return; clear_simple_list(); while ((pEvent = (struct event *) simple_list(ch->events)) != NULL) { event_cancel(pEvent); } }
void CItem::StopUniqueExpireEvent() { if (!m_pkUniqueExpireEvent) return; if (GetValue(2) != 0) // °ФАУЅГ°ЈБ¦ АМїЬАЗ ѕЖАМЕЫАє UniqueExpireEventё¦ БЯґЬЗТ јц ѕшґЩ. return; // HARD CODING if (GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE) m_pOwner->ShowAlignment(true); SetSocket(ITEM_SOCKET_UNIQUE_SAVE_TIME, event_time(m_pkUniqueExpireEvent) / passes_per_sec); event_cancel(&m_pkUniqueExpireEvent); ITEM_MANAGER::instance().SaveSingleItem(this); }
void CItem::StopUniqueExpireEvent() { if (!m_pkUniqueExpireEvent) return; if (GetValue(2) != 0) // °ÔÀӽð£Á¦ ÀÌ¿ÜÀÇ ¾ÆÀÌÅÛÀº UniqueExpireEvent¸¦ Áß´ÜÇÒ ¼ö ¾ø´Ù. return; // HARD CODING if (GetVnum() == UNIQUE_ITEM_HIDE_ALIGNMENT_TITLE) m_pOwner->ShowAlignment(true); SetSocket(ITEM_SOCKET_UNIQUE_SAVE_TIME, event_time(m_pkUniqueExpireEvent) / passes_per_sec); event_cancel(&m_pkUniqueExpireEvent); ITEM_MANAGER::instance().SaveSingleItem(this); }
void CItem::SetOwnership(LPCHARACTER ch, int iSec) { if (!ch) { if (m_pkOwnershipEvent) { event_cancel(&m_pkOwnershipEvent); m_dwOwnershipPID = 0; TPacketGCItemOwnership p; p.bHeader = HEADER_GC_ITEM_OWNERSHIP; p.dwVID = m_dwVID; p.szName[0] = '\0'; PacketAround(&p, sizeof(p)); } return; } if (m_pkOwnershipEvent) return; if (true == LC_IsEurope()) { if (iSec <= 10) iSec = 30; } m_dwOwnershipPID = ch->GetPlayerID(); item_event_info* info = AllocEventInfo<item_event_info>(); strlcpy(info->szOwnerName, ch->GetName(), sizeof(info->szOwnerName)); info->item = this; SetOwnershipEvent(event_create(ownership_event, info, PASSES_PER_SEC(iSec))); TPacketGCItemOwnership p; p.bHeader = HEADER_GC_ITEM_OWNERSHIP; p.dwVID = m_dwVID; strlcpy(p.szName, ch->GetName(), sizeof(p.szName)); PacketAround(&p, sizeof(p)); }
void CTargetManager::DeleteTarget(DWORD dwPID, DWORD dwQuestIndex, const char * c_pszTargetName) { itertype(m_map_kListEvent) it = m_map_kListEvent.find(dwPID); if (it == m_map_kListEvent.end()) return; std::list<LPEVENT>::iterator it2 = it->second.begin(); while (it2 != it->second.end()) { LPEVENT pkEvent = *it2; TargetInfo * info = dynamic_cast<TargetInfo*>(pkEvent->info); if ( info == NULL ) { sys_err( "CTargetManager::DeleteTarget> <Factor> Null pointer" ); ++it2; continue; } if (dwQuestIndex == info->dwQuestIndex) { if (!c_pszTargetName || !strcmp(info->szTargetName, c_pszTargetName)) { if (info->bSendToClient) { // <Factor> Removed pkChr //SendTargetDeletePacket(info->pkChr->GetDesc(), info->iID); LPCHARACTER pkChr = CHARACTER_MANAGER::instance().FindByPID(info->dwPID); if (pkChr != NULL) { SendTargetDeletePacket(pkChr->GetDesc(), info->iID); } } event_cancel(&pkEvent); it2 = it->second.erase(it2); continue; } } it2++; } }
bool timed_event_cancel(LPCHARACTER ch) { if (ch->m_pkTimedEvent) { event_cancel(&ch->m_pkTimedEvent); return true; } /* RECALL_DELAY 차후 전투로 인해 귀환부 딜레이가 취소 되어야 할 경우 주석 해제 if (ch->m_pk_RecallEvent) { event_cancel(&ch->m_pkRecallEvent); return true; } END_OF_RECALL_DELAY */ return false; }
/* * Return memory used by a trigger * The command list is free'd when changed and when * shutting down. */ void free_trigger(trig_data *trig) { if (trig->name) { free(trig->name); trig->name = NULL; } if (trig->arglist) { free(trig->arglist); trig->arglist = NULL; } if (trig->var_list) { free_varlist(trig->var_list); trig->var_list = NULL; } if (GET_TRIG_WAIT(trig)) event_cancel(GET_TRIG_WAIT(trig)); free(trig); }
bool timed_event_cancel(LPCHARACTER ch) { if (ch->m_pkTimedEvent) { event_cancel(&ch->m_pkTimedEvent); return true; } /* RECALL_DELAY ВчИД АьЕх·О АОЗШ ±НИЇєО µф·№АМ°Ў ГлјТ µЗѕоѕЯ ЗТ °жїм БЦј® ЗШБ¦ if (ch->m_pk_RecallEvent) { event_cancel(&ch->m_pkRecallEvent); return true; } END_OF_RECALL_DELAY */ return false; }
void CItem::Destroy() { event_cancel(&m_pkDestroyEvent); event_cancel(&m_pkOwnershipEvent); event_cancel(&m_pkUniqueExpireEvent); event_cancel(&m_pkTimerBasedOnWearExpireEvent); event_cancel(&m_pkRealTimeExpireEvent); event_cancel(&m_pkAccessorySocketExpireEvent); CEntity::Destroy(); if (GetSectree()) GetSectree()->RemoveEntity(this); }
void CHARACTER::ClearAffect(bool bSave) { TAffectFlag afOld = m_afAffectFlag; WORD wMovSpd = GetPoint(POINT_MOV_SPEED); WORD wAttSpd = GetPoint(POINT_ATT_SPEED); itertype(m_list_pkAffect) it = m_list_pkAffect.begin(); while (it != m_list_pkAffect.end()) { CAffect * pkAff = *it; if (bSave) { if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) ) { ++it; continue; } if (IsPC()) { SendAffectRemovePacket(GetDesc(), GetPlayerID(), pkAff->dwType, pkAff->bApplyOn); } } ComputeAffect(pkAff, false); it = m_list_pkAffect.erase(it); CAffect::Release(pkAff); } if (afOld != m_afAffectFlag || wMovSpd != GetPoint(POINT_MOV_SPEED) || wAttSpd != GetPoint(POINT_ATT_SPEED)) UpdatePacket(); CheckMaximumPoints(); if (m_list_pkAffect.empty()) event_cancel(&m_pkAffectEvent); }
bool CWarMap::SetEnded() { sys_log(0, "WarMap::SetEnded %d", m_kMapInfo.lMapIndex); if (m_pkEndEvent) return false; if (m_TeamData[0].pkChrFlag) { M2_DESTROY_CHARACTER(m_TeamData[0].pkChrFlag); m_TeamData[0].pkChrFlag = NULL; } if (m_TeamData[0].pkChrFlagBase) { M2_DESTROY_CHARACTER(m_TeamData[0].pkChrFlagBase); m_TeamData[0].pkChrFlagBase = NULL; } if (m_TeamData[1].pkChrFlag) { M2_DESTROY_CHARACTER(m_TeamData[1].pkChrFlag); m_TeamData[1].pkChrFlag = NULL; } if (m_TeamData[1].pkChrFlagBase) { M2_DESTROY_CHARACTER(m_TeamData[1].pkChrFlagBase); m_TeamData[1].pkChrFlagBase = NULL; } event_cancel(&m_pkResetFlagEvent); m_bEnded = true; war_map_info* info = AllocEventInfo<war_map_info>(); info->pWarMap = this; info->iStep = 0; SetEndEvent(event_create(war_end_event, info, PASSES_PER_SEC(10))); return true; }
void CItem::StopAccessorySocketExpireEvent() { if (!m_pkAccessorySocketExpireEvent) return; if (!IsAccessoryForSocket()) return; int new_time = GetAccessorySocketDownGradeTime() - (60 - event_time(m_pkAccessorySocketExpireEvent) / passes_per_sec); event_cancel(&m_pkAccessorySocketExpireEvent); if (new_time <= 1) { AccessorySocketDegrade(); } else { SetAccessorySocketDownGradeTime(new_time); } }